﻿using System;
using System.Linq;
using System.Windows.Forms;
using OwnZTec.LojaDelivery.Data;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmUsuario : OwnZForm
    {
        #region -- Membros e construtores -------------------------------------------------------------------------------------------------
        public FrmFuncionario FormFuncionario
        {
            get;
            set;
        }

        private bool Edicao
        {
            get;
            set;
        }

        private bool _alterado;

        public tbFuncionario Funcionario;

        public FrmUsuario()
        {
            InitializeComponent();
            this.ConfigurarFormFilho();
            ControlBox = false;
        }

        private void FrmUsuario_Load(object sender, EventArgs e)
        {
            txtNome.Text = Funcionario.desNomeFuncionario;

            cmbPerfil.DataSource = Contexto.Db.tbPerfils;
            cmbPerfil.ValueMember = "idPerfil";
            cmbPerfil.DisplayMember = "desPerfil";

            Edicao = Funcionario.tbUsuario != null;

            if (Edicao)
            {
                txtLogin.Text = Funcionario.tbUsuario.desLogin;
                cmdRestarSenha.Enabled = true;

                cmbPerfil.SelectedValue = Funcionario.tbUsuario.idPerfil;
            }
            else
                cmdRestarSenha.Enabled = false;

            _alterado = false;
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Eventos ----------------------------------------------------------------------------------------------------------------
        private void cmdSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void FrmUsuario_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!_alterado)
                return;

            var res = Contexto.MainForm.ExibirMensagemSairSemSalvar();

            if (res == DialogResult.Yes)
                return;

            e.Cancel = true;
        }

        private void txtLogin_TextChanged(object sender, EventArgs e)
        {
            _alterado = true;
        }

        private void cmbPerfil_SelectedIndexChanged(object sender, EventArgs e)
        {
            _alterado = true;
        }

        private void txtLogin_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (txtLogin.Text.EhNuloOuVazio())
            {
                erpErro.SetError(txtLogin, "Informar o login do funcionário");
                e.Cancel = true;
                return;
            }

            if (Edicao && Contexto.Db.tbUsuarios.Where(u => u.desLogin == txtLogin.Text && u.idFuncionario != Funcionario.idFuncionario).Count() > 0 ||
                !Edicao && Contexto.Db.tbUsuarios.Where(u => u.desLogin == txtLogin.Text).Count() > 0)
            {
                erpErro.SetError(txtLogin, "Este login já esta cadastrado, favor escolher outro login");
                e.Cancel = true;
                return;
            }

            erpErro.SetError(txtLogin, "");
        }

        private void cmdSalvar_Click(object sender, EventArgs e)
        {
            if (Edicao)
            {
                Funcionario.tbUsuario.desLogin = txtLogin.Text;
                Funcionario.tbUsuario.desSenha = "";
                Funcionario.tbUsuario.idPerfil = (int) cmbPerfil.SelectedValue;
                Contexto.Db.SaveChanges();
            }
            else
            {
                var usr = new tbUsuario
                {
                    idFuncionario = Funcionario.idFuncionario,
                    idPerfil = (int)cmbPerfil.SelectedValue,
                    desLogin = txtLogin.Text,
                    desSenha = ""
                };

                Contexto.Db.tbUsuarios.AddObject(usr);

                Contexto.Db.SaveChanges();
            }

            _alterado = false;
            Close();
        }

        private void cmdRestarSenha_Click(object sender, EventArgs e)
        {
            Funcionario.tbUsuario.desSenha = "";

            Contexto.Db.SaveChanges();
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------
    }
}
